package com.xlh.service.course;

import com.xlh.dto.course.ZtreeDTO;
import com.xlh.param.course.CourseDirectionParam;
import com.xlh.param.course.DirectionParam;
import com.xlh.pojo.course.CourseExtend;
import com.xlh.pojo.course.Direction;

import java.util.List;

/**
 * 课程方向
 * <p>
 * Created by lx on 2019/12/25.
 */
public interface DirectionService {

    /**
     * 获取全部的专业方向列表
     *
     * @param type 学校类型
     * @return
     */
    List<ZtreeDTO> listDirection(Integer type);

    /**
     * 添加/修改/删除专业方向
     *
     * @param type   学校类型
     * @param params 添加的参数
     */
    void createDirection(Integer type, List<DirectionParam> params);

    /**
     * 添加/修改/删除课程与专业方向的关联关系
     *
     * @param params 参数
     */
    void createCourseExtend(List<CourseDirectionParam> params);

    /**
     * 批量删除专业方向
     *
     * @param ids 专业方向id集合
     */
    void batchDeleteDirection(List<Long> ids);

    /**
     * 获取全部的专业方向列表
     *
     * @param types            学校类型集合
     * @param ownAuthorityFlag 是否查询当前用户（教师）权限
     * @return
     */
    List<ZtreeDTO> queryDirectionZtree(List<Integer> types, Boolean ownAuthorityFlag);

    /**
     * 获取课程与专业方向的关联关系
     *
     * @param directionIds 专业方向id集合
     * @param courseIds    课程id集合
     * @return
     */
    List<CourseExtend> queryCourseExtend(List<Long> directionIds, List<Long> courseIds);

    /**
     * 删除课程与专业方向的关联关系
     *
     * @param directionIds 专业方向id集合
     * @param courseIds    课程id集合
     */
    void deleteCourseExtend(List<Long> directionIds, List<Long> courseIds);

    /**
     * 获取专业方向
     *
     * @param types 学校类型集合
     * @param names 专业方向名称集合
     * @return
     */
    List<Direction> queryDirection(List<Integer> types, List<String> names);

    /**
     * 获取专业方向
     *
     * @param ids 专业方向id集合
     * @return
     */
    List<Direction> queryDirection(List<Long> ids);

    /**
     * 批量添加课程与专业方向的关联关系
     *
     * @param courseExtends 课程与专业方向的关联关系
     */
    void insertBatchCourseExtend(List<CourseExtend> courseExtends);

    /**
     * 添加课程与专业方向的关联关系
     *
     * @param courseIds    课程id集合
     * @param directionIds 专业方向id集合
     */
    void createCourseExtend(List<Long> courseIds, List<Long> directionIds);

    /**
     * 批量添加课程方向
     *
     * @param directions 课程方向集合
     */
    void insertBatchDirection(List<Direction> directions);

    /**
     * 批量修改课程方向
     *
     * @param directions 课程方向集合
     */
    void updateBatchDirection(List<Direction> directions);

    /**
     * 复制课程额外信息
     *
     * @param courseId    原课程id
     * @param newCourseId 新课程id
     */
    void copyCourseExtend(Long courseId, Long newCourseId);

    /**
     * 下载excel
     *
     * @param directionId 专业方向id
     */
    void download(Long directionId);

}
